package com.dhl.rabbitmq.two;

import com.dhl.rabbitmq.utils.RabbitUtils;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

/**
 * 这是一个工作线程(相当于之前讲的消费者)
 * 多个消费者，接收生产者消息，轮询接收，不重复测试。
 *
 * @title: WorkThread01
 * @Author danghailiang
 * @Date: 2022/6/9 9:20
 * @Version 1.0
 */
public class WorkThread01 {
    /**
     * 队列名称
     */
    public static final String QUEUE_NAME = "workThread";

    // 接受消息
    public static void main(String[] args) throws Exception {
        // 获取信道
        Channel channel = RabbitUtils.getChannel();
        // 消费者成功消费之后的回调
        DeliverCallback deliverCallback = (consumerTag, message) -> System.out.println(new String(message.getBody()));
        // 消费者消费中断之后回调
        CancelCallback cancelCallback = message -> System.out.println(message + ": 消息接受被取消，被中断,回调接口");
        System.out.println("C1等待接受消息..............");
        /**
         * 消费者接受消息
         * 1. 消费哪个队列名称
         * 2. 消费成功之后是否自动应答 true自动应答，false手动应答(多使用手动应答)
         * 3. 消费者成功消费的回调: 此类 DeliverCallback
         * 4. 消费者取消消费的回调：此类 CancelCallback
         */
        channel.basicConsume(
                QUEUE_NAME,
                true,
                deliverCallback,
                cancelCallback
        );

    }
}
